Terraformを始める: Pt->1
Terraformは学習曲線が短く、HashiCorp Configuration Language (HCL)がシンプルなので、Infrastructure as Codeの優れたソリューションと言えます。
Terraformは2171のプロバイダ(AWS、Azure、Githubなど)をサポートし、巨大なコミュニティ、強力なプラグインサポート、Ansibleなどの構成管理ツールとの柔軟なインターフェイスを持っているので、私のお気に入りの構成管理ツールの1つです。
100レベルから200レベルまで、Terraformを根本的に理解するだけでなく、Terraformを使った運用にも役立つような連載を目指したいと思っています。
前提条件
- AWSアカウント
- IDE (Visual Studio Code)
- ターミナルへのアクセス
プロバイダーとは何ですか?
- Terraformの始め方については、数多くの記事があります。TerraformはEC2 インスタンスを作成するために使用できますが、単にコードを書くことよりも、裏で何が起こっているかを理解することの方がはるかに重要です。「裏で何が起こっているかを知ることは、あらゆる問題の解決とトラブルシューティングに役立ちます」。
- TerraformにAWSとやり取りしてインフラを作りたいことを伝えるために、providerブロックを使用しました。
- 上記のコードを
ec2.tf
と呼ぶことにします。しかし、terraformがあるため、これでは不十分です。 - 次に、コマンドラインで
terraform init
を使用して、terraformがAWSのサービスと対話するために使用するAWSプロバイダ用のプラグインをダウンロードします。 - TerraformはAWSプロバイダプラグインを格納するために
.terraform
ディレクトリを作成しました。 - Terraformのプロバイダ一覧
ノート:- プロバイダのバージョンを記録する .terraform.lock.hcl
ファイルも terraform init
で作成されます。このロックファイルは、新しいプロバイダが追加されるたびに更新する必要があり、そのため、terraform init
を再度実行する必要があります.
リソースとは何ですか?
- Terraformのリソースは、私たちが選んだプロバイダーブロックに基づいて様々なサービスと対話するための手段です。
- Terraformは、Ec2、EBS、Dynamodbなど、AWSが提供するサービスに相当するリソースをすべてawsプロバイダ向けに提供しています。
- サブリソースを持つAWSサービス一覧
- Resourcesのパラメータには、オプションとなるものと、必須となるものがあります。
- オプション(AWSはテラフォームが管理するプロバイダですが、推奨です)
- 必須(テラフォーマーズが管理していないプロバイダ用)
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance
ノート:- Terraformはバージョン0.13からterraform blockを追加することを推奨しています。AWSなどterraformが管理しているプロバイダでは不要ですが、Terraformが管理していないプロバイダでは必要です。
まとめ
DevOpsの目的は、ご存知の通り、ソフトウェアのデリバリー効率を高めることですが、そのためには、ある種のツールが必要です。そこで、Terraformのようなソリューションが、Infrastructure as Codeと自動化でビジネスを支援することができます。
Terraformはインフラストラクチャの管理方法を再定義し、DevOpsの実行をより迅速かつ効率的にすることで、DevOpsを変えています。皆さんはAnsible、Chef、Puppetなどのツールを使ってソフトウェアを自動化したり提供したりしたことがあるかもしれません。Terraformは同じような原理、インフラストラクチャー・アズ・コードに従っていますが、インフラストラクチャーの自動化に集中しています。Terraformを使えば、クラウドインフラ全体を簡単に指定することができます。
レファレンス
https://registry.terraform.io/browse/providers
https://learn.hashicorp.com/collections/terraform/aws-get-started